package com.ly.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 引入Ribbon的核心组件IRule,并将自己的轮询策略改为随机（不使用默认的轮询）
 * 另Ribbon的轮询策略分别有7种：
 *     com.netflix.loadbalancer.RoundRobinRule 轮询
 *     com.netflix.loadbalancer.RandomRule 随机
 *     com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务，如果获取服务失败
 *     则在指定时间内会进行重试，获取可用的服务
 *     WeightedResponseTimeRule 对RoundRobinRule的扩展，响应速度越快的实例选择权重越大，越容易被选择
 *     BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务，然后选择一个并发量最小的服务
 *     AvailabilityFilteringRule 先过滤掉故障实例，在选择并发最小的实例
 *     ZoneAvoidanceRule 默认规则，复合判断Server所在区域的性能和Server的可用性选择服务器
 */
@Configuration
public class MySelfRule {

    @Bean
    public IRule myRule() {
        return new RandomRule();
    }
}
